#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/wait.h>

int main()
{
    // 创建一个子进程
    if (fork() == 0) // 子进程
    {
        printf("[%d]: 我将在3秒后正常退出，退出值是88\n", getpid());
        for (int i = 30; i >= 0; i--) // 3S后结束
        {
            printf("进程 %d 正在运行 %d\n", getpid(), i);
            sleep(1);
        }

        printf("进程 %d 结束\n", getpid());
        return 88; // 结束子进程
    }

    printf("[%d]: 我正在试图回收子进程的资源...\n", getpid());

    int stat = 0; // 退出状态码
    wait(&stat);  // 阻塞等待......

    // 判断死亡原因
    if (WIFSIGNALED(stat))
    {
        printf("进程被信号杀死\n");
        // printf("进程正常退出\n");
    }

    printf("进程回收成功,按任意键结束\n");

    getchar();
}